home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / CC_C / 0574.ZIP / _STRHAND.ASM < prev    next >
Assembly Source File  |  1986-11-21  |  936b  |  52 lines

  1. include compiler.inc
  2.     ttl    $STRHAND, 1.01, 08-03-86 clr
  3.  
  4. ; internal routine to convert stream pointer to handle.  If bad handle, returns
  5. ; AX=-1; else returns handle in AX.  Returns state of MODE BIT (offset 2 in _ftb
  6. ; in BL register, state of UGC (word) in CX
  7.  
  8.  
  9.     dseg
  10.     exterr
  11.     extrn    _ftb:byte
  12.  
  13.     cseg
  14.  
  15.     procdef $strhand <<stream,ptr>>
  16.     pushreg
  17.     pushds
  18.  
  19.     mov    si,offset _ftb
  20.     ldptr    ax,stream,ds
  21.     mov    dx,ds
  22.     or    dx,ax
  23.     jz    invalid
  24.  
  25.     mov    di,ax        ;save stream pointer
  26.     sub    ax,si        ;convert to handle
  27.     jz    nodiv
  28.     mov    si,5
  29.     cwd
  30.     div    si
  31. nodiv:    xor    dx,dx        ;clear error code
  32.     moverr    dx
  33.     cmp    ax,0        ;check range
  34.     jl    seterr
  35.     cmp    ax,19        ;20 handles is DOS max
  36.     jl    ok
  37.  
  38. seterr:
  39.     or    byte ptr 2[di],10h    ; set error code
  40.     mov    ax,-1        ;and return ERROR
  41. ok:
  42.     mov    bl,byte ptr 2[di]    ; return MODE BIT
  43.     mov    cx,word ptr [di]    ; return UGC BYTE
  44. out1:
  45.     pret
  46. invalid:
  47.     mov    ax,-1
  48.     jmp    short out1
  49.     pend    $strhand
  50.     finish
  51. 
  52.